From: Ian Campbell Date: Thu, 3 Apr 2014 16:54:34 +0000 (+0100) Subject: Revert "Revert "xen/arm: Allocate memory for dom0 from the bottom with the 1:1 Workar... X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~5278 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=d6ca80e03cc062c984401aefba5e277a9d9139a0;p=xen.git Revert "Revert "xen/arm: Allocate memory for dom0 from the bottom with the 1:1 Workaround"" This reverts commit 1be5c1947fd52f5faaf6b678a829d47b0ec88bfd, effectively reinstating 6c21cb36e263de2db8716b477157a5b6cd531e1e. Without this booting dom0 on systems with >4GB of RAM is broken because the guest gets allocated a memory range which it cannot access. Signed-off-by: Ian Campbell --- diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index a0b73d2a4d..502db84690 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -69,12 +69,19 @@ static void allocate_memory_11(struct domain *d, struct kernel_info *kinfo) { paddr_t start; paddr_t size; - struct page_info *pg; + struct page_info *pg = NULL; unsigned int order = get_order_from_bytes(dom0_mem); int res; paddr_t spfn; + unsigned int bits; + + for ( bits = PAGE_SHIFT + 1; bits < PADDR_BITS; bits++ ) + { + pg = alloc_domheap_pages(d, order, MEMF_bits(bits)); + if ( pg != NULL ) + break; + } - pg = alloc_domheap_pages(d, order, 0); if ( !pg ) panic("Failed to allocate contiguous memory for dom0");